package day17;

/**
 * @author aiPlusPlus
 * @version 1.0
 * @date 2023/1/17 14:46
 */

import java.util.HashMap;
import java.util.Map;

/**
 * 给你一个数组 nums ，数组中只包含非负整数。定义 rev(x) 的值为将整数 x 各个数字位反转得到的结果。比方说 rev(123) = 321 ， rev(120) = 21 。我们称满足下面条件的下标对 (i, j) 是 好的 ：
 *
 * 0 <= i < j < nums.length
 * nums[i] + rev(nums[j]) == nums[j] + rev(nums[i])
 * 请你返回好下标对的数目。由于结果可能会很大，请将结果对 109 + 7 取余 后返回。
 *
 *
 *
 * 示例 1：
 *
 * 输入：nums = [42,11,1,97]
 * 输出：2
 * 解释：两个坐标对为：
 *  - (0,3)：42 + rev(97) = 42 + 79 = 121, 97 + rev(42) = 97 + 24 = 121 。
 *  - (1,2)：11 + rev(1) = 11 + 1 = 12, 1 + rev(11) = 1 + 11 = 12 。
 * 示例 2：
 *
 * 输入：nums = [13,10,35,24,76]
 * 输出：4
 */
public class Solution1 {
    public int countNicePairs(int[] nums) {
        Map<Integer,Integer> map =new HashMap<>();
        for (int num : nums) {
            int pre = num-rev(num);
            map.put(pre,map.getOrDefault(pre,0)+1);
        }
        int ans = 0;
        for (Map.Entry<Integer, Integer> integerIntegerEntry : map.entrySet()) {
            for (Integer i = 0; i < integerIntegerEntry.getValue(); i++) {
                ans = (ans+i)%1000000007;
            }
        }
        return ans;
    }
    public int rev(int num){
        StringBuilder str = new StringBuilder();
        while (num!=0){
            str.append(num%10);
            num/=10;
        }
        try {
            return Integer.parseInt(str.toString());
        } catch (NumberFormatException e) {
            return 0;
        }
    }
}
